package cn.vetech.sync.elasticsearch.service;

import java.util.List;
import java.util.Map;

import cn.vetech.sync.elasticsearch.model.IndexTypeModel;
import cn.vetech.sync.elasticsearch.model.request.SyncByTableNoPkIntervalRequest;
import cn.vetech.sync.elasticsearch.model.request.SyncByTableRequest;

/**
 * @author chenqingsong
 * @version 1.0
 * @since 2017-08-31 17:48:00
 */
public interface SyncService {
	/**
	 * 通过database和table同步数据库
	 *
	 * @param request
	 *            请求参数
	 * @return 后台同步进程执行成功与否
	 */
	boolean syncByTable(SyncByTableRequest request);

	/**
	 * 开启事务的读取mysql并插入到Elasticsearch中（读锁）
	 * 
	 * @param request
	 *            SyncByTableNoPkIntervalRequest 请求参数
	 * @param primaryKey
	 *            String 主键名
	 * @param dataList
	 *            List<Map<String, Object>> 需要操作的数据
	 * @param indexTypeModel
	 *            IndexTypeModel 配置文件数据
	 */
	void batchInsertElasticsearch(SyncByTableRequest request, String primaryKey, List<Map<String, Object>> dataList,
			IndexTypeModel indexTypeModel);

	/**
	 * 通过database和table同步数据库,忽略主键
	 *
	 * @param request
	 *            SyncByTableNoPkIntervalRequest 请求参数
	 * @return boolean 后台同步进程执行成功与否
	 */
	boolean syncTableIgnorePrimaryKey(SyncByTableNoPkIntervalRequest request);

	/**
	 * 根据数据库和表查询数量
	 * @param database String 数据库
	 * @param table String 表
	 * @return Long
	 */
	Long getTableCount(String database,String table);

	/**
	 * 获取数据表数据
	 * @param table_name String 表
	 * @return List<Map<String,Object>>
	 */
	List<Map<String,Object>> getTableData(String table_name);

	/**
	 * 清除es中对应的索引及数据
	 * @param request SyncByTableNoPkIntervalRequest
	 * @return Boolean 是否成功
	 */
    Boolean clean(SyncByTableNoPkIntervalRequest request);
}
